sql server中将一个字段根据某个字符拆分成多个字段显示 |
您所在的位置:网站首页 › sql 拆分 › sql server中将一个字段根据某个字符拆分成多个字段显示 |
要返回的对象部分。object_piece 的数据类型为 int 值,可以为下列值: 1 = 对象名称 2 = 架构名称 3 = 数据库名称 4 = 服务器名称 PARSENAME 函数不指示指定名称的对象是否存在。PARSENAME 仅返回指定对象名称的指定部分。 第二种方案:思路:写一个函数 根据特定的分割符号利用SUBSTRING和CHARINDEX将字段进行截取拆分, --这个函数 返回的是一个表 ALTER FUNCTION [dbo].[f_splitlianxi] ( @str NVARCHAR(500),--要分割的字符串 @fengefu NVARCHAR(20)--进行分割的符号 )RETURNS @table TABLE(id INT,val NVARCHAR(50)) AS BEGIN DECLARE @index INT,@startsplit INT,@id INT --@index分隔符所在的位置的下标 @startsplit 每次分割开始的位置 SELECT @index=CHARINDEX(@fengefu,@str),@startsplit=1,@id=1 WHILE @index>0 BEGIN IF @id>1 --第一次循环之后 都执行这个方法体中的代码 BEGIN SELECT @startsplit=@index+LEN(@fengefu) --分割开始位置等于 之前的字符下标位置+字符本身的长度 SELECT @index=CHARINDEX(@fengefu,@str,@startsplit) END IF @index>0 --第一次循环 截取位置从@startsplit=1开始 BEGIN INSERT INTO @table VALUES (@id,SUBSTRING(@str,@startsplit,@index-@startsplit)) --要截取的字符串 开始位置 要截取的长度 END ELSE BEGIN --最后一次循环 此时由于匹配不到分割字符 @index=0 截取剩余的字符串 INSERT INTO @table VALUES (@id,SUBSTRING(@str,@startsplit,LEN(@str)-@startsplit+1)) END SELECT @id=@id+1 END RETURN END调用规则: SELECT [Address],(SELECT val FROM [f_splitlianxi]([Address],'-') WHERE id=1 ) AS 小区名 , (SELECT val FROM [f_splitlianxi]([Address],'-') WHERE id=2 )AS 单元号, (SELECT val FROM [f_splitlianxi]([Address],'-') WHERE id=3 )AS 楼房号, (SELECT val FROM [f_splitlianxi]([Address],'-') WHERE id=4 )AS 房间号 FROM PersonPS:还有一种更加粗暴的写法 就是不用另外创建函数 直接select 的时候 就通过截取字符串,来附加新的列 例如:有一个需求是 T_Person表中有字段Birth 里面的信息在输入的时候 形式不符合规定 ID Birth 1 1900/2/12 2 1898/2/3 3 4 NULL现在要求统一形式成:1987-05-03的形式: 下面是具体过程: UPDATE dbo.T_Person SET Birth= SUBSTRING(Birth,1,CHARINDEX('/',Birth)-1) --得到年份 +'-'+ CASE WHEN SUBSTRING(Birth,CHARINDEX('/',Birth)+1,CHARINDEX('/',Birth,CHARINDEX('/',Birth)+1)-(CHARINDEX('/',Birth)+1))0 --防止没有/的信息字段 在进行字符串截取的时候报错 没有'/'的返回0 但是NULL 得到的值是NULL --注释 SELECT CHARINDEX('/','123') --结果是 0 SELECT CHARINDEX('/',NULL) --结果是 NULL
执行之后的结果是: ID Birth 1 1900-02-12 2 1898-02-03 3 4 NULL |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |